package com.tiancheng.trade.payment.service;

import com.tiancheng.trade.commom.web.model.response.MerchantChannelResponseDTO;
import com.tiancheng.trade.commom.web.model.response.SettlementRuleResVO;
import com.tiancheng.trade.commom.web.cache.model.MerchantBO;
import com.tiancheng.trade.commom.web.model.request.MerchantChannelRequestDTO;

import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @Date 2024/11/19
 * @Author DCH
 */
public interface SettlePlatformService {

    /**
     * 计算子订单平台抽佣金额
     * 规则1：只要是自营、平台类型的清分规则，平台抽佣为0，订单金额全部划付给腾云子商户
     * 规则2：清分百分比商品，平台抽佣金额=子订单金额*百分比
     * 规则3：清分固定金额商品，平台抽佣金额=固定金额
     *
     * @param subAmount    子订单金额
     * @param productId    商品编码
     * @param productCount 商品数量
     * @param ruleMap      清分规则集合（key=productId, value=SettlementRuleDTO）
     * @return Long
     */
    Integer countSubPlatformAmount(Integer subAmount, String productId, Integer productCount, Map<String, SettlementRuleResVO> ruleMap);

    /**
     * 计算子订单平台抽佣金额-new
     * 规则1：只要是自营、平台类型的清分规则，平台抽佣为0，订单金额全部划付给腾云子商户
     * 规则2：清分百分比商品，平台抽佣金额=子订单金额*百分比
     * 规则3：清分固定金额商品，平台抽佣金额=固定金额
     *
     * @param subAmount    子订单金额
     * @param productCount 商品数量
     * @param ruleDTO      子订单商品or商户的清分规则
     * @return Long
     */
    Integer countSubPlatformAmountNew(Integer subAmount, Integer productCount, SettlementRuleResVO ruleDTO);

    /**
     * 商户清分规则下，计算平台抽佣
     * @param subAmount 子订单金额
     * @param merchantRuleQueryResVo 商户清分规则
     * @return
     */
    Integer platformAmountCommissionMerchantSettleRule(Integer subAmount, SettlementRuleResVO merchantRuleQueryResVo);

    /**
     * 查询支付商户信息
     * @param merchantChannelRequestDTOS 查询参数
     * @return
     */
    Map<String, MerchantBO> getMerchantInfo(List<MerchantChannelRequestDTO> merchantChannelRequestDTOS);

    /**
     * 获取商户清分规则集合-最新的
     *
     * @param ruleCodes 规则编码
     * @return Map （key=merchantId, value=SettlementRuleDTO）
     */
    Map<String, SettlementRuleResVO> querySettleRules(Set<String> ruleCodes);

    /**
     * 查询清分规则集合
     * @param orgPaymentChannelId
     * @param merchantCods
     * @return
     */
    Map<String, List<SettlementRuleResVO>> querySettleRules(Long orgPaymentChannelId, List<String> merchantCods);

    /**
     * 查询平台级子商户配（支付子商户）配置
     * @param orgPaymentChannelId
     * @return
     */
    List<MerchantChannelResponseDTO> queryOrgSubMerchant(List<Long> orgPaymentChannelId);
}
